"""
Case Type   : cm_ctl
Case Name   : 执行cm_ctl pause后删除暂停标识文件
Create At   : 2023/04/10
Owner       : opentestcase012
Description :
    1.执行cm_ctl pause;
    2.查看集群状态;
    3.查看暂停标识文件;
    4.所有节点手动删除暂停标识文件;
    5.查看集群状态;
Expect      :
    1.执行成功
    2.集群状态正常,有暂停标识
    3.有暂停标识文件
    4.删除成功
    5.集群状态恢复正常,无暂停标识yes
History     :
"""
import os
import time
import unittest

from testcase.utils.Common import Common
from testcase.utils.CommonSH import CommonSH
from testcase.utils.Constant import Constant
from testcase.utils.Logger import Logger
from yat.test import Node
from yat.test import macro

primary_sh = CommonSH('PrimaryDbUser')


# @unittest.skipIf(2 != primary_sh.get_node_num(), '非1+2环境不执行')
class DefinedResource(unittest.TestCase):
    def setUp(self):
        self.log = Logger()
        self.log.info(f'----{os.path.basename(__file__)} start----')
        self.common = Common()
        self.constant = Constant()
        self.pri_user = Node('PrimaryDbUser')
        self.pri_root = Node('PrimaryRoot')
        self.primary_sh = CommonSH('PrimaryDbUser')
        self.pause_file = os.path.join(macro.GAUSSHOME_BIN_PATH,
                                       'cluster_manual_pause')

    def test_cm(self):
        text = '----step1:执行cm_ctl pause; expect:暂停成功----'
        self.log.info(text)
        cm_ctl_res = self.primary_sh.exec_cm_ctl('pause')
        self.assertIn(self.constant.cm_pause_success_msg, cm_ctl_res,
                      '执行失败:' + text)

        text = '----step2:查看集群状态; expect:集群状态正常,有暂停标识----'
        self.log.info(text)
        cm_ctl_res = self.primary_sh.exec_cm_ctl('query', '-Civ')
        self.assertIn(self.constant.CLUSTER_NORMAL_MSG, cm_ctl_res,
                      '执行失败:' + text)
        self.assertIn('pausing         : Yes', cm_ctl_res, '执行失败:' + text)

        text = '----step3:查看暂停标识文件; expect:有暂停标识文件----'
        self.log.info(text)
        res = self.primary_sh.exec_gs_ssh(f'ls {self.pause_file}')
        self.assertEqual(3, res.count(self.pause_file), "执行失败:" + text)

        text = '----step4:所有节点手动删除暂停标识文件; expect:删除成功----'
        self.log.info(text)
        res = self.primary_sh.exec_gs_ssh(
            f'rm -rf {self.pause_file};ls {self.pause_file};')
        self.assertEqual(3, res.count(self.constant.NO_FILE_MSG),
                         "执行失败:" + text)

        time.sleep(10)
        text = '----step5:查看集群状态; expect:集群状态恢复正常,无暂停标识yes----'
        self.log.info(text)
        cm_ctl_res = self.primary_sh.exec_cm_ctl('query', '-Civ')
        self.assertIn(self.constant.CLUSTER_NORMAL_MSG, cm_ctl_res,
                      '执行失败:' + text)
        self.assertNotIn('pausing         : Yes', cm_ctl_res, '执行失败:' + text)

    def tearDown(self):
        self.log.info('-----清理环境-----')
        text = '----恢复集群状态; expect:执行成功----'
        self.log.info(text)
        cm_ctl_res1 = self.primary_sh.exec_cm_ctl('resume')
        cm_ctl_res2 = self.primary_sh.exec_cm_ctl('start')
        cm_ctl_res3 = self.primary_sh.exec_cm_ctl('switchover', '-a')
        time.sleep(10)
        cm_ctl_res4 = self.primary_sh.exec_cm_ctl('query', '-Civ')
        self.assertIn(self.constant.cm_resume_success_msg, cm_ctl_res1,
                      '执行失败:' + text)
        self.assertIn(self.constant.cm_start_success_msg, cm_ctl_res2,
                      '执行失败:' + text)
        self.assertIn(self.constant.cm_switchover_success_msg, cm_ctl_res3,
                      '执行失败:' + text)
        self.assertIn(self.constant.CLUSTER_NORMAL_MSG, cm_ctl_res4,
                      "执行失败:" + text)
        self.log.info(f'----{os.path.basename(__file__)} finish----')
